﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sireass.Bl;
using Csla;
using Telerik.Web.UI;
using System.Configuration;
using log4net;
using Sireass.Bl.Security;
using System.Web.Security;
using System.Security.Principal;
using Sireass.Asp.Util;


namespace Sireass.Asp.Administracion
{
	public partial class CatalogoPrograma : System.Web.UI.Page
	{
		private ProgramaList pl = null;
		// Create a logger for use in this class
		private static readonly ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

		#region Page
		protected void Page_Load(object sender, EventArgs e)
		{
			if (!IsPostBack)
			{
				Security.ValidarSeguridad(Response, HttpContext.Current.User.Identity, typeof(ProgramaList));
				//cargando los combos				
				//Escuela
				rcmbEscuela.DataSource = NombreValorList.GetNombreValorList(new SingleCriteria<string>("Cat_Escuela"));
				rcmbEscuela.DataBind();
				
				CargarProgramas();
			}
			else
			{
				lblExito.Text = string.Empty;
				lblError.Text = string.Empty;
			}
		}
		#endregion

		#region Botones
		protected void radBtnRegresar_Click(object sender, EventArgs e)
		{
			LimpiarControles();
			mvwAdministracionPrograma.ActiveViewIndex = 0;
		}

		protected void radBtnGuardar_Click(object sender, EventArgs e)
		{
			RadButton btn = (RadButton)sender;
			if (btn.Text == "Guardar")
			{
				if (Insertar() == true)
				{
					lblExito.Text = "Operación realizada con éxito";
				}
				else return;
			}			
			else // Actualizar
			{
				long idPrograma = (long)ViewState["vwsIdPrograma"];
				if (Actualizar(idPrograma) == true)
				{
					lblExito.Text = "Operación realizada con éxito";
				}
				else return;
			}
			CargarProgramas();
			mvwAdministracionPrograma.ActiveViewIndex = 0;
			LimpiarControles();
		}
		#endregion

		#region Grid
		protected void radGrdListado_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
		{
			try
			{
				string strComando = e.CommandName;
				long idPrograma;
				switch (strComando)
				{
					case "Editar":
						idPrograma = (long)radGrdListado.MasterTableView.Items[e.Item.ItemIndex].GetDataKeyValue("IdPrograma");
						ViewState["vwsIdPrograma"] = idPrograma;
						if (CargarDatosPrograma(idPrograma) == true)
						{
							lblRegistroEdicion.Text = "EDICIÓN";
							mvwAdministracionPrograma.ActiveViewIndex = 1;
							radBtnGuardar.Text = "Actualizar";
						}
						else return;
						break;
					case "Nuevo":
						lblRegistroEdicion.Text = "REGISTRO";
						mvwAdministracionPrograma.ActiveViewIndex = 1;
						break;
					case "Eliminar":
						idPrograma = (long)radGrdListado.MasterTableView.Items[e.Item.ItemIndex].GetDataKeyValue("IdPrograma");
						if (Eliminar(idPrograma) == true)
						{
							CargarProgramas();
						}
						break;
					default: break;
				} //fin switch
			}
			catch (Exception ex)
			{
				lblError.Text = ex.Message;
			}
		}

		protected void radGrdListado_PageIndexChanged(object sender, GridPageChangedEventArgs e)
		{
			CargarProgramas();
		}

		protected void radGrdListado_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e)
		{
			CargarProgramas();
		}

		protected void radGrdListado_PreRender(object sender, EventArgs e)
		{
			try
			{
				CheckBox chk;
				string strHabilitado;
				foreach (GridDataItem celda in radGrdListado.Items)
				{
					chk = (CheckBox)celda["Activado"].FindControl("chkHabilitado");
					strHabilitado = celda["Habilitado"].Text;

					if (strHabilitado == "True")
						chk.Checked = true;

					else
						chk.Checked = false;
				}
			}
			catch (Exception ex)
			{
				lblError.Text = ex.Message;
			}
		}
		#endregion

		#region Métodos
		protected Boolean Insertar() //ya está
		{
			try
			{
				ProgramaEdit objEdit = ProgramaEdit.NewProgramaEdit();
				objEdit.ClavePrograma = rtxtClavePrograma.Text;
				objEdit.Programa = rtxtPrograma.Text;
				objEdit.IdEscuela = Convert.ToInt64(rcmbEscuela.SelectedValue);
				objEdit.FechaInicioVigencia = rdpFechaInicioVigencia.SelectedDate.Value;
				objEdit.FechaFinVigencia = rdpFechaFinVigencia.SelectedDate.Value;
				objEdit.Habilitado = chkActivo.Checked;
				objEdit.Save();
				return true;
			}
			catch
			{
				lblError.Text = "Ocurrió un error al actualizar los datos. Inténtelo de nuevo";
				return false;
			}
		}

		protected Boolean Actualizar(long idPrograma)
		{
			try
			{
				ProgramaEdit objEdit = ProgramaEdit.GetProgramaEdit(idPrograma);
				objEdit.ClavePrograma = rtxtClavePrograma.Text;
				objEdit.Programa = rtxtPrograma.Text;
				objEdit.IdEscuela = Convert.ToInt64(rcmbEscuela.SelectedValue);
				objEdit.FechaInicioVigencia = rdpFechaInicioVigencia.SelectedDate.Value;
				objEdit.FechaFinVigencia = rdpFechaFinVigencia.SelectedDate.Value;
				objEdit.Habilitado = chkActivo.Checked;
				objEdit.Save();
				return true;
			}
			catch
			{
				lblError.Text = "Ocurrió un error al actualizar los datos. Inténtelo de nuevo";
				return false;
			}
		}

		protected Boolean Eliminar(long idPrograma)
		{
			try
			{
				ProgramaEdit.DeleteProgramaEdit(idPrograma);
				return true;
			}
			catch
			{
				lblError.Text = "Ocurrió un error al actualizar los datos. Inténtelo de nuevo";
				return false;
			}
		}

		protected Boolean CargarDatosPrograma(long idPrograma)
		{
			try
			{
				ProgramaEdit objEdit = ProgramaEdit.GetProgramaEdit(idPrograma);
				hfIdPrograma.Value = objEdit.IdPrograma.ToString();
				rtxtClavePrograma.Text = objEdit.ClavePrograma;
				rtxtPrograma.Text = objEdit.Programa;
				rcmbEscuela.SelectedValue = Convert.ToString(objEdit.IdEscuela);
				rdpFechaInicioVigencia.SelectedDate = objEdit.FechaInicioVigencia;
				rdpFechaFinVigencia.SelectedDate = objEdit.FechaFinVigencia;
				chkActivo.Checked = objEdit.Habilitado;
				return true; //si es exitoso
			}
			catch
			{
				lblError.Text = "Ocurrió un error al cargar los datos del programa. Inténtelo de nuevo";
				return false;
			}
		}

		protected Boolean CargarProgramas() //para cargar el grid
		{
			try
			{
				pl = ProgramaList.GetProgramaList();
				radGrdListado.DataSource = pl;
				radGrdListado.DataBind();				
			
				return true;
			}
			catch (Exception ex)
			{
				lblError.Text = ex.Message;
				return false;
			}
		}

		private void LimpiarControles()
		{
			rtxtClavePrograma.Text = string.Empty;
			rtxtPrograma.Text = string.Empty;
			rcmbEscuela.ClearSelection();
			rcmbEscuela.Text = string.Empty;
			rdpFechaInicioVigencia.SelectedDate = null;
			rdpFechaFinVigencia.SelectedDate = null;
			chkActivo.Checked = false;
			radBtnGuardar.Text = "Guardar";
			ViewState["vwsIdPrograma"] = null;
		}
		#endregion
	}
}